package cn.twh.wall.util;

import java.util.Map;

import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;
/**
 * ongl工具类
 * @author TWH
 *
 */
public class OgnlUtil {
	/**
	 * 获取 objec 类型返回值
	 * @param root 根map
	 * @param ognlExpr ognl表达式
	 * @return 获取到的值
	 * @throws OgnlException 当ognl表达式错误，或者表达式取不到指定值时抛出该异常
	 */
	public static Object getObjectValue(Map<?,?> root, String ognlExpr) throws OgnlException {
		OgnlContext ognlContext = new OgnlContext(null,null,new DefaultMemberAccess(true));      
		Object exp = Ognl.parseExpression(ognlExpr);
		return Ognl.getValue(exp, ognlContext, root);
	}
	/**
	 * 获取 T 类型返回值
	 * @param root 根map
	 * @param ognlExpr ognl表达式
	 * @param <T> 响应泛型
	 * @return 接收的是什么类型就强转成什么类型
	 * @throws OgnlException 当ognl表达式错误，或者表达式取不到指定值时抛出该异常
	 */
	@SuppressWarnings("unchecked")
	public static <T extends Object> T getValue(Map<?,?> root, String ognlExpr) throws OgnlException {
		return (T) getObjectValue(root,ognlExpr);
	}
}